package com.laiketui.order.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.laiketui.order.api.dto.OrderDetailDTO;
import com.laiketui.order.api.dto.OrderMessageDTO;
import com.laiketui.order.api.dto.WarehouseDTO;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Data
public class StoreOrderEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 店铺ID
     */
    private Integer mchId;

    /**
     * 商城id
     */
    private Integer storeId;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 姓名
     */
    private String name;

    /**
     * 联系电话
     */
    private String mobile;

    /**
     * 商品总数量
     */
    private Integer num;

    /**
     * 历史总价(划线价)
     */
    private Long oldTotalPrice;

    /**
     * 总价(折扣价)
     */
    private Long totalPrice;

    /**
     * 母单号(多个同时一起支付时母单号为同一个)(支付页面通过此单号查询支付金额等信息)
     */
    private String orderParentNo;

    /**
     * 子单号(店铺单号)
     */
    private String orderNo;

    /**
     * 省
     */
    private String provice;

    /**
     * 市
     */
    private String city;

    /**
     * 县/区
     */
    private String area;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 用户备注
     */
    private String remark;

    /**
     * 商品总体积
     */
    private BigDecimal totalVolume;

    /**
     * 当前使用的折扣率
     */
    private BigDecimal discount;

    /**
     * 订单状态 1待付款 2 待确认 3待发货 4可发货 5已发货 0 已取消
     */
    private Integer status;

    /**
     * 支付方式 1 结算通 2 余额支付 3 线下汇款
     */
    private Integer payType;

    /**
     * 期望发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date expectedTime;

    /**
     * 订单过期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date expireTime;

    /**
     * 创建人
     */
    private String createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date finishTime;

    /**
     * 下单类型1用户下单2店铺下单3平台下单
     */
    private Integer operationType;

    /**
     * 支付单号唯一标识(上游支付唯一标识)
     */
    private String payOrderNo;

    /**
     * 税费(分)
     */
    private Long taxation;

    /**
     * 最终支付金额(折扣价+ 税费)
     */
    private Long payPrice;

    /**
     * 订单类型 1 自营订单 2 pop订单(跟工厂结算)
     */
    private Integer orderType;

    /**
     * 结算金额(分)
     */
    private Long settlementAmount;

    /**
     * 0 未结算 1可结算 2已结算
     */
    private Integer settlementStatus;

    /**
     * 结算时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date settlementTime;

    /**
     * 发货单号
     */
    private String deliverNo;

    /**
     * 到货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date arriveTime;

    /**
     * 店铺开始确认备货完成时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date mchConfirmTime;

    /**
     * 店铺确认备货完成状态: 0未确认 1已确认
     */
    private Integer mchConfirmType;

    /**
     * 0 正常 1已删除
     */
    private Integer deleted;

    /**
     * 更新人
     */
    private String updateBy;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 下架商品数量(一个商品ID算一个)
     */
    private Integer removeProductNum;

    /**
     * 采购价
     */
    private Long totalCostPrice;

    /**
     * 总包件数
     */
    private Integer totalBomNum;

    /**
     * 商品种类(一个商品id算一个种类)
     */
    private Integer productNum;

    /**
     * 期望发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date expectedDeliveryTime;

    /**
     * 实际发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date realDeliveryTime;

    /**
     * 预计发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date estimatedDeliveryTime;

    /**
     * 商品件数
     */
    private Integer skuNum;

    /**
     * 搜索关键字
     */
    private String keyWords;

    /**
     * 店铺名称(工厂名称)
     */
    private String mchName;

    /**
     * 分配客服userId
     */
    private Integer customerId;

    /**
     * 1 珞珂家居PC端
     */
    private Integer source;

    /**
     * 指定发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date specifyDeliveryTime;

    /**
     * 结算类型 1 现结
     */
    private Integer settlementType;

    /**
     * 品牌(商品品牌集合 - 拼接)
     */
    private String brands;

    /**
     * 工厂备注
     */
    private String mchRemark;

    /**
     * 0 未安排发货 1 已安排发货
     */
    private Integer shipmentType;

    /**
     * 安排发货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date shipmentTime;

    /**
     * 预支付时间(提交审核时间)
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date opPrepaymentTime;

    /**
     * 质检单图片,多个以逗号分隔
     */
    private String inspectionPhoto;

    /**
     * 质检备注
     */
    private String inspectionRemark;

    /**
     * 0 不加急 1加急
     */
    private Integer urgentType;

    /**
     * 货齐可发 0 否 1 是
     */
    private Integer whollyType;


    //来源名称
    private String sourceName;

    private List<OrderDetailDTO> details;

    //收货地址
    private WarehouseDTO deliveryAddress;

    //服务商/装修公司
    private WarehouseDTO factoryAddress;

    //渠道
    private String channel;

    //客服名称
    private String customerName;

    /**
     * 线下付款时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date offlinePayTime;

    /**
     * 凭证图片
     */
    private String offlinePayImg;




    //订单状态描述
    private String opOrderParentStatusRemark;

    private List<OrderMessageDTO> messages;


    /**
     * 用户角色名称
     */
    private String opRoleName;

    /**
     * 线下支付类型 1银行卡转账
     */
    private Integer opOfflinePayType;

    /**
     * 子单数量
     */
    private Integer opOrderNum;

    /**
     * 订单状态 1 待付款 2 待审核 2 备货中 4 已发货 5已完成  0 已取消
     */
    private Integer opOrderParentStatus;

    /**
     * op.STATUS AS opOrderParentStatus,
     * 	op.offline_pay_type as opOfflinePayType,
     * 	op.order_num as opOrderNum,
     * 	op.total_price as opTotalPrice,
     * 	op.pay_price   as opPayPrice,
     * 	op.role_name as opRoleName,
     * 	op.taxation as opTaxation,
     */

    private Long opTotalPrice;
    
    private Long opPayPrice;

    private Long opTaxation;

    //用户备注
    private String opRemark;

    /**
     * 开票单位名称
     */
    private String organization;
    /**
     * 发货单多个图片,多个以逗号分隔
     */
    private String opInvoicePhoto;
    /**
     * 发货单备注
     */
    private String opInvoiceRemark;

    /**
     * 开票纳税人识别码
     */
    private String taxpayerNumber;

    /**
     * 开票地址
     */
    private String taxAddress;

    /**
     * 开票电话
     */
    private String taxPhone;

    /**
     * 开票账户
     */
    private String taxAccount;

    /**
     * 开票银行
     */
    private String taxBank;

    /**
     * 个人开票身份证
     */
    private String taxCardNo;

    /**
     * 个人开票姓名
     */
    private String taxName;

    /**
     * 1 个人 2 企业
     */
    private Integer taxType;
    //生产工厂
    private String factoryName;

    private String uProvince;

    private String uCity;

    private String uCounty;

    private String uDetailedAddress;

    private String uUserName;

    private String uMobile;
//    签约主体 1.个人 2.企业 3.个体工商户
    private Integer uSignatoryType;
    //公司名称
    private String uCompanyName;
    //余额抵扣金额
    private Long deductionAmount;




}
